#pragma once

#include "fxcc/core/graph/opengl3/pch.h"
#include "fxcc/core/graph/opengl3/UniformBuffer.h"
#include "fxcc/core/graph/opengl3/MeshJack.h"

namespace fxcc::graph::opengl3
{
	struct IBuffers
	{
		std::shared_ptr<UniformBuffer> m_PassBuffer;
		std::shared_ptr<UniformBuffer> m_ObjBuffer;
		std::shared_ptr<UniformBuffer> m_BoneBuffer;
		std::shared_ptr<UniformBuffer> m_LightBuffer;

		// Geometry Data
		std::shared_ptr<MeshJack> m_CubeMesh;
		std::shared_ptr<MeshJack> m_SphereMesh;
		std::shared_ptr<MeshJack> m_QuadMesh;
		std::shared_ptr<MeshJack> m_Quad2Mesh;
		std::shared_ptr<MeshJack> m_Texture2DMesh;

		IBuffers();

		void Binding();

		void SetObjData(const fxcc::graph::common::Transform& inst);

		void SetObjData(const fxcc::graph::common::Effect3d::ObjData& inst);

		void SetPassData(const fxcc::graph::common::Effect3d::PassData& inst);

		void SetBoneData(const  fxcc::graph::common::Effect3d::BoneData& inst);

		void SetLightEffectData(const fxcc::graph::common::LightEffect& inst);

		~IBuffers();
		
		static const std::string GetUniformPart3d() ;

		static const std::string GetVersionStr() ;


	};
};